﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
using Tibet.Entidades;
using Tibet.Logica.FabricaLogica;

namespace Tibet.Logica.Comandos.ComandoMotorRegla
{
    public class ConsultarDocumentMetodoSlashAsterisco: ConsultarDocumentMetodo
    {
        public override void Ejecutar()
        //Que todos los metodos del archivo tengan almenos un comentario
        {
            //variables iniciales  
            int LineaActual = 0; //lineaactual que se esta leyendo.
            Resultado resp = new Resultado();//inicializo el objeto que sera retonado
            int contLLaves = 0; //contador que sirve para saber cuando se termina un metodo.
            bool esMetodo = false; //Auxiliar para saber si estamos en un metodo o no.
            bool comentario = false;


            //se inicializa resp asumiendo que la regla se cumple
            resp.Fecha = new DateTime();
            resp.Fecha = DateTime.Now;
            resp.Respuesta = true;
            resp.Mensaje = "Todos los metodos estan documentados correctamente";
            resp.Linea = LineaActual;

            try
            {
                List<EntidadString> listaStr = new List<EntidadString>();

                for (int j = 0; j < ListaEntidad.Count; j++)
                {
                    listaStr.Add((EntidadString)ListaEntidad.ElementAt(j));
                }


                foreach (EntidadString linea in listaStr)   //Recorro la lista linea por linea
                {
                    LineaActual++;                  //Aumenta el contador de la linea.
                    if (linea.Linea.Contains("private") == true || linea.Linea.Contains("public") == true || linea.Linea.Contains("protected") == true)
                    { //Checkeamos que se esta declarando algo
                        if (linea.Linea.Contains("(") == true && linea.Linea.Contains(")") == true && linea.Linea.Contains("=") != true)
                        {
                            esMetodo = true;
                        }
                    }
                    if (esMetodo == true)
                    {
                        if (linea.Linea.Contains("/*") == true)
                        {
                            comentario = true;
                        }
                        if (linea.Linea.Contains("{") == true)
                            contLLaves++;
                        if (linea.Linea.Contains("}") == true)
                        {
                            contLLaves--;
                            if (contLLaves == 0)
                            {
                                esMetodo = false;
                                if (comentario == false)
                                {
                                    resp.Linea = LineaActual;
                                    resp.Respuesta = false;
                                    resp.Mensaje = "Existe un metodo no documentado";
                                    Entidad = (resp as Entidad);
                                }
                                else
                                {
                                    comentario = false;
                                }
                            }
                        }




                    }
                }
                Entidad = (resp as Entidad);
            }
            catch (Exception e)
            {
                resp.Linea = LineaActual;
                resp.Respuesta = false;
                resp.Mensaje = "Ocurrio un error inesperado al leer la linea " + LineaActual + ". Error " + e.Message;
                Entidad = (resp as Entidad);
            }
        }
    }
}
